import math
from manim import *

class matrix(LinearTransformationScene):
    def __init__(self):
        LinearTransformationScene.__init__(
            self,
            show_coordinates=True,  # 显示坐标系
            leave_ghost_vectors=True,  # 显示虚影
            show_basis_vectors=True,  # 显示基向量
        )

    def construct(self):
        # 线性变化
        matrix = [
            [2, 0],
            [0, 1],
        ]

        # 向量
        vector = Arrow(ORIGIN, [2, 1, 0], color=YELLOW)
        self.add_vector(vector)

        # 线性变化
        self.apply_matrix(matrix)
        
        self.wait(10)
        
class ex1(LinearTransformationScene):
    def __init__(self):
        LinearTransformationScene.__init__(
            self,
            show_coordinates=True,  # 显示坐标系
            leave_ghost_vectors=True,  # 显示虚影
            show_basis_vectors=True,  # 显示基向量
        )
    def construct(self):
        # 线性变化
        matrix = [
            [1, 1],
            [0, 1],
        ]
        # 向量
        vector = Arrow(ORIGIN, [1, 1, 0], color=YELLOW)
        self.add_vector(vector)
        # 线性变化
        self.apply_matrix(matrix)
        self.wait(5)
        

class rotate(LinearTransformationScene):
    def __init__(self):
        LinearTransformationScene.__init__(
            self,
            show_coordinates=True,  # 显示坐标系
            leave_ghost_vectors=True,  # 显示虚影
            show_basis_vectors=True,  # 显示基向量
        )
    def construct(self):
        # 线性变化 -- 旋转
        theta = math.radians(-45)
        matrix = [
            [np.cos(theta), -np.sin(theta)],
            [np.sin(theta), np.cos(theta)],
        ]
        # 向量
        vector = Arrow(ORIGIN, [2, 1, 0], color=YELLOW)
        self.add_vector(vector)
        # 线性变化
        self.apply_matrix(matrix)
        self.wait(5)